<?php

declare(strict_types=1);

namespace app\common\lib;

/**
 * 此处剔除common公共方法，该方法为面向过程的思想
 * 要更多用类库的思想去管理，即面向对象的思想，做到代码高度可维护和管理
 * Class Num
 * @package app\common\lib
 */
class Num
{

    public static function getCode(int $len = 4): int
    {
        $code = rand(1000, 9999);
        if ($len == 6) {
            $code = rand(10000, 99999);
        }
        return $code;
    }

    //判断是否为正整数
    public static function checkIsPositiveInteger($num){
        $flag = false;
        if(is_int($num) && $num > 0){$flag = true;}
        return $flag;
    }

    //判断是大于0的数字且至多两位小数，适用如金额、带小数的天/时等
    public static function checkIsDecimal2($value)
    {
        if (!is_numeric($value)) {
            return false;
        }
        if ($value <= 0) {
            return false;
        }

        if (preg_match('/^[0-9]+(\.\d{1,2})?$/',$value)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 通过经纬度计算距离
     * lat纬度 lng经度
     * 返回公里
     * @param $lat1
     * @param $lng1
     * @param $lat2
     * @param $lng2
     * @return float|int
     */
    public static function getDistance($lat1, $lng1, $lat2, $lng2)
    {
        $EARTH_RADIUS = 6378.137;
        $radLat1 = self::rad($lat1);
        $radLat2 = self::rad($lat2);

        $a = $radLat1 - $radLat2;
        $b = self::rad($lng1) - self::rad($lng2);

        $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2)));
        $s = $s * $EARTH_RADIUS;
        $s = round($s * 10000) / 10000;
        return $s;

    }
    private static function rad($d)
    {
        return $d * M_PI / 180.0;
    }
}